package top.hcode.hoj.utils;

import lombok.extern.slf4j.Slf4j;
import org.nutz.lang.Files;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;

/**
 * @author orangej
 * @since 2025/2/19
 */
@Slf4j
public class RenderFileUtil {

    public static void renderFile(String filename, File file, HttpServletResponse response) {
        try {
            // 检查文件是否存在
            if (file.exists() && file.isFile()) {
                // 设置响应头，指定内容类型为二进制流
                response.addHeader("Content-Type", "application/octet-stream");
                // 对文件名进行 URL 编码，避免中文乱码
                String encodedFilename = URLEncoder.encode(filename, "UTF-8");
                // 设置响应头，指定文件名
                response.addHeader("Content-Disposition", "attachment; filename=\"" + encodedFilename + "\"");
                // 设置响应状态码为 200，表示成功
                response.setStatus(200);

                // 打开文件输入流
                response.getOutputStream().write(Files.readBytes(file));
            } else {
                // 如果文件不存在，设置响应状态码为 404，表示文件未找到
                response.setStatus(404);
            }
        } catch (IOException e) {
            // 处理异常，设置响应状态码为 500，表示服务器内部错误
            response.setStatus(500);
            log.error("error in CommonMethods.renderFile", e);
        }
    }

}
